venvで作成した仮想環境内のPythonバージョンを変更したい
pipによるライブラリのインストール状態をディレクトリごとに独立させたい場合は、venvを利用するのが便利です。
このvenvで作成した仮想環境上のPythonバージョンは、環境作成時のローカルのPythonバージョンで基本的に固定されます。今回はこの作成済みのvenv仮想環境上のPythonバージョンを変更したい場合にどうすればよいかを確認してみました。
確認してみた
まず、venvで作成した仮想環境上のPythonバージョンが、冒頭で述べたように環境作成時のローカルのバージョンで固定されることを確認してみます。
ローカル環境のPythonバージョンは3.7.2
です。
$ pyenv versions system * 3.7.2 (set by /home/ec2-user/.pyenv/version) 3.8.0 $ python -V Python 3.7.2
この状態でpython -m venv [venvディレクトリ]
により仮想環境を作成すると、作成された環境内のPythonバージョンは作成時のローカルのバージョンと同じ3.7.2
となります。
$ python -m venv .venv $ . .venv/bin/activate (.venv) $ python -V Python 3.7.2
このとき、ローカル環境のPythonバージョンをpyenvで3.8.0
に切り替えてみます。
(.venv) $ deactivate $ pyenv global 3.8.0
3.8.0
に切り替わりました。
$ pyenv versions system 3.7.2 * 3.8.0 (set by /home/ec2-user/.pyenv/version) $ python -V Python 3.8.0
この状態で、先程作成したvenv環境をもう一度有効化すると、Pythonバージョンは3.7.2
のまま変わっていません。環境作成時のローカルのPythonバージョン3.7.2
で仮想環境内のバージョンが固定されていることが確認できました。
$ . .venv/bin/activate (.venv) $ python -V Python 3.7.2
この固定されたPythonバージョンを変更するにはどうすればよいかというと、結論としては、仮想環境内のPythonバージョンを切り替えるためには、venvの--clear
オプションを利用して仮想環境を一度クリアする必要があります。
実際にやってみます。ローカル環境でpython -m venv [venvディレクトリ] --clear
を実行し、作成済みの仮想環境をクリアします。
(.venv) $ deactivate $ python -V Python 3.8.0 $ python -m venv .venv --clear
そして、クリアした仮想環境上のPythonバージョンを確認すると、ちゃんと3.8.0
に切り替わっていました。
$ . .venv/bin/activate (.venv) ec2-user:~/environment $ python -V Python 3.8.0
まとめ
venvで作成した仮想環境上のPythonバージョンを変更したい場合は、
- ローカル環境のPythonバージョンを仮想環境で利用したいバージョンに切り替える。
python -m venv [venvディレクトリ] --clear
で仮想環境をクリアする。
とすればOK。
注意点としてclear前にvenv環境にpip installしていたモジュールはクリアされるので、インストールし直す必要があります。
おわりに
別の方法として仮想環境内でPythonをアップグレードする手もあると思いましたが、ローカル環境でpyenvを利用しているなら今回の方法が便利なのではと思います。